package cn.mrcode.fd.blog.services;

import cn.mrcode.fd.blog.dto.article.NewResData;
import cn.mrcode.fd.blog.entity.Article;
import cn.mrcode.fd.blog.entity.User;
import cn.mrcode.fd.blog.entityCu.ArticleCu;
import cn.mrcode.fd.blog.exception.BlogException;
import cn.mrcode.fd.utils.mybatis.page.Page;

import java.util.List;

/**
 * @author zhuqiang
 * @version V1.0
 * @date 2015/12/3 22:17
 */
public interface IArticleService {
    List<Article> queryAll();
    Page<Article> queryAllPage(Page<Article> page);
    ArticleCu findById(String id);
    Article _findById(String id);
    /**
     * 获取指定文章的访问数量
     * @param articleId
     * @return
     */
    Long findReadNumById(String articleId);

    /**
     * 按 用户账户 和 文章信息修改文章
     * @param articleCu
     * @param userAccount
     */
    void mod(ArticleCu articleCu,String userAccount);
    String insert(ArticleCu articleCu, User user) throws Exception;
    Page<ArticleCu> queryAll(Page<ArticleCu> page, String account);

    /**
     * 查询用户文章列表，按状态查询
     * @param page
     * @param account
     * @param articleStatus
     * @return
     */
    Page<ArticleCu> queryAll(Page<ArticleCu> page, String account,Integer articleStatus);
    Page<ArticleCu> queryAllOrderBy(Page<ArticleCu> page, String orderBy, String sortType);
    ArticleCu find(String account, String id);

    /**
     * 获取创建新文章前的准备数据
     * @param userAccount
     * @return
     */
    ArticleCu createPre(String userAccount);

    String loadDetailsBody(String articleId);

    /**
     * 获取最热门文章
     * @param i 前几？
     * @return
     */
    List<ArticleCu> top(int i);

    /**
     * 用户站点最热博客
     * @param i
     * @param userAccount
     * @return
     */
    List<ArticleCu> top(int i,String userAccount);

    /**
     * 删除文章
     * @param articleId 文章id
     * @param userAccount 所属账户
     * @param userId
     * @param currentStatus 文章当前状态
     * @param toNewStatus 删除到新的状态
     * @param statusRemark 状态转移描述
     * @return
     */
    String delete(String articleId,String userAccount,String userId, int currentStatus,int toNewStatus,String statusRemark) throws Exception;

    /**
     * 按分类id查找文章列表
     * @param page
     * @param categoryId
     * @return
     */
    Page<ArticleCu> queryAllByCategory(Page<ArticleCu> page, String categoryId);

    /**
     * 从回收站恢复文章
     * @param articleId 文章id
     * @param account 所属用户
     * @param modBy 更新用户id
     * @return
     */
    String recovery(String articleId, String account, String modBy);

    /**
     * 创建新文章前的数据：
     *  1. 用户所有分类数据
     * @param userAccount
     * @return
     */
    NewResData newData(String userAccount) throws BlogException;
}
